package Thread;
/**守护线程
 * */
public class demo7 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            while(true) {
                System.out.println("hello thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        /* 将t设置为守护线程，当main线程结束后，守护线程必须结束
         * 由于t是一个守护线程，当主线程的for循环结束后，
         * 主线程会打印"main结束"，然后主线程结束。因为此时JVM中只剩下守护线程 t，
         * 所以JVM将会退出，守护线程 t也将被终止。
         */

        t.setDaemon(true);
        t.start();
        /* 如果守护线程在主线程结束前有足够的时间运行，它可能会打印四次或更多次"hello thread"。
        这完全取决于线程调度器的行为和系统的当前状态。*/
        for (int i = 0; i < 3; i++) {
            System.out.println("hello main");
            Thread.sleep(1000);
        }
        System.out.println("main结束");
    }
}
